{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Fourier Neural Operator 1D"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\Users\\s1612415\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\tqdm\\auto.py:22: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
      "  from .autonotebook import tqdm as notebook_tqdm\n"
     ]
    }
   ],
   "source": [
    "## Imports \n",
    "import matplotlib.pyplot as plt \n",
    "import numpy as np \n",
    "import torch \n",
    "import torch.nn as nn\n",
    "from timeit import default_timer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "## Set seeds\n",
    "torch.manual_seed(0)\n",
    "np.random.seed(0)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Create Data"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Ordinary Differential Equation:\n",
    "\n",
    "\\begin{align*}\n",
    "m\\frac{d^2x}{dt^2} = - kx\n",
    "\\end{align*}\n",
    "\n",
    "Solution: \n",
    "$$x(t) = x_0 \\cos{\\left(\\sqrt{\\frac{k}{m}}t\\right)} + \\frac{v_0}{\\sqrt{\\frac{k}{m}}}\\sin{\\left(\\sqrt{\\frac{k}{m}}t\\right)}$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "## TODO: Create Simple Harmonic Oscillator Class"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "## Simple Harmonic Oscillator\n",
    "def simple_harmonic_oscillator(k: int, m: int, x0: int, v0: int, t: np.array) -> np.array:\n",
    "    x = x0 * np.cos(np.sqrt(k / m) * t) + (v0 / np.sqrt(k / m)) * np.sin(np.sqrt(k / m) * t)\n",
    "    return x    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "## Number of Samples \n",
    "n = 100000\n",
    "## Output\n",
    "data_t = []\n",
    "data_x = []\n",
    "\n",
    "# k = np.random.randint(1, 100)\n",
    "# m = np.random.randint(1, 100)\n",
    "# x0 = np.random.normal(0, 10)\n",
    "# v0 = np.random.normal(0, 10)\n",
    "# k = 1\n",
    "# m = 1000\n",
    "# x0 = 1\n",
    "# v0 = 1\n",
    "\n",
    "t = np.linspace(0, 100, 100)\n",
    "\n",
    "## Generate Data\n",
    "for _ in range(n):\n",
    "    k = np.random.randint(1, 10)\n",
    "    k_vec = k * np.ones(100)\n",
    "    m = np.random.randint(100, 1000)\n",
    "    m_vec = m * np.ones(100)\n",
    "    x0 = np.random.normal(0, 10)\n",
    "    x0_vec = x0 * np.ones(100)\n",
    "    v0 = np.random.normal(0, 1)\n",
    "    v0_vec = v0 * np.ones(100)\n",
    "    \n",
    "    data_t.append([k_vec, m_vec, x0_vec, v0_vec, t])\n",
    "    data_x.append(simple_harmonic_oscillator(k, m, x0, v0, t))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "## Plot\n",
    "# plt.scatter(data_t, data_x, alpha=0.5)\n",
    "# plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\s1612415\\AppData\\Local\\Temp\\ipykernel_12956\\3560125304.py:1: UserWarning: Creating a tensor from a list of numpy.ndarrays is extremely slow. Please consider converting the list to a single numpy.ndarray with numpy.array() before converting to a tensor. (Triggered internally at ..\\torch\\csrc\\utils\\tensor_new.cpp:233.)\n",
      "  data_t = np.array(torch.tensor(data_t).float())\n"
     ]
    }
   ],
   "source": [
    "data_t = np.array(torch.tensor(data_t).float())\n",
    "data_x = np.array(torch.tensor(data_x).float().unsqueeze(1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "## Data Loader\n",
    "from torch.utils.data import Dataset, DataLoader\n",
    "import pandas as pd\n",
    "\n",
    "class CustomDataset(Dataset):\n",
    "    def __init__(self, t, x):\n",
    "        self.t = t\n",
    "        self.x = x\n",
    "\n",
    "    def __len__(self):\n",
    "        return len(self.t)\n",
    "    \n",
    "    def __getitem__(self, index):\n",
    "        return self.t[index], self.x[index]\n",
    "\n",
    "data = CustomDataset(data_t, data_x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  6.       ,   6.       ,   6.       ,   6.       ,   6.       ,\n",
       "          6.       ,   6.       ,   6.       ,   6.       ,   6.       ,\n",
       "          6.       ,   6.       ,   6.       ,   6.       ,   6.       ,\n",
       "          6.       ,   6.       ,   6.       ,   6.       ,   6.       ,\n",
       "          6.       ,   6.       ,   6.       ,   6.       ,   6.       ,\n",
       "          6.       ,   6.       ,   6.       ,   6.       ,   6.       ,\n",
       "          6.       ,   6.       ,   6.       ,   6.       ,   6.       ,\n",
       "          6.       ,   6.       ,   6.       ,   6.       ,   6.       ,\n",
       "          6.       ,   6.       ,   6.       ,   6.       ,   6.       ,\n",
       "          6.       ,   6.       ,   6.       ,   6.       ,   6.       ,\n",
       "          6.       ,   6.       ,   6.       ,   6.       ,   6.       ,\n",
       "          6.       ,   6.       ,   6.       ,   6.       ,   6.       ,\n",
       "          6.       ,   6.       ,   6.       ,   6.       ,   6.       ,\n",
       "          6.       ,   6.       ,   6.       ,   6.       ,   6.       ,\n",
       "          6.       ,   6.       ,   6.       ,   6.       ,   6.       ,\n",
       "          6.       ,   6.       ,   6.       ,   6.       ,   6.       ,\n",
       "          6.       ,   6.       ,   6.       ,   6.       ,   6.       ,\n",
       "          6.       ,   6.       ,   6.       ,   6.       ,   6.       ,\n",
       "          6.       ,   6.       ,   6.       ,   6.       ,   6.       ,\n",
       "          6.       ,   6.       ,   6.       ,   6.       ,   6.       ],\n",
       "       [292.       , 292.       , 292.       , 292.       , 292.       ,\n",
       "        292.       , 292.       , 292.       , 292.       , 292.       ,\n",
       "        292.       , 292.       , 292.       , 292.       , 292.       ,\n",
       "        292.       , 292.       , 292.       , 292.       , 292.       ,\n",
       "        292.       , 292.       , 292.       , 292.       , 292.       ,\n",
       "        292.       , 292.       , 292.       , 292.       , 292.       ,\n",
       "        292.       , 292.       , 292.       , 292.       , 292.       ,\n",
       "        292.       , 292.       , 292.       , 292.       , 292.       ,\n",
       "        292.       , 292.       , 292.       , 292.       , 292.       ,\n",
       "        292.       , 292.       , 292.       , 292.       , 292.       ,\n",
       "        292.       , 292.       , 292.       , 292.       , 292.       ,\n",
       "        292.       , 292.       , 292.       , 292.       , 292.       ,\n",
       "        292.       , 292.       , 292.       , 292.       , 292.       ,\n",
       "        292.       , 292.       , 292.       , 292.       , 292.       ,\n",
       "        292.       , 292.       , 292.       , 292.       , 292.       ,\n",
       "        292.       , 292.       , 292.       , 292.       , 292.       ,\n",
       "        292.       , 292.       , 292.       , 292.       , 292.       ,\n",
       "        292.       , 292.       , 292.       , 292.       , 292.       ,\n",
       "        292.       , 292.       , 292.       , 292.       , 292.       ,\n",
       "        292.       , 292.       , 292.       , 292.       , 292.       ],\n",
       "       [  9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,\n",
       "          9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,\n",
       "          9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,\n",
       "          9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,\n",
       "          9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,\n",
       "          9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,\n",
       "          9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,\n",
       "          9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,\n",
       "          9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,\n",
       "          9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,\n",
       "          9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,\n",
       "          9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,\n",
       "          9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,\n",
       "          9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,\n",
       "          9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,\n",
       "          9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,\n",
       "          9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,\n",
       "          9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,\n",
       "          9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,\n",
       "          9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ,   9.78738  ],\n",
       "       [  2.2408931,   2.2408931,   2.2408931,   2.2408931,   2.2408931,\n",
       "          2.2408931,   2.2408931,   2.2408931,   2.2408931,   2.2408931,\n",
       "          2.2408931,   2.2408931,   2.2408931,   2.2408931,   2.2408931,\n",
       "          2.2408931,   2.2408931,   2.2408931,   2.2408931,   2.2408931,\n",
       "          2.2408931,   2.2408931,   2.2408931,   2.2408931,   2.2408931,\n",
       "          2.2408931,   2.2408931,   2.2408931,   2.2408931,   2.2408931,\n",
       "          2.2408931,   2.2408931,   2.2408931,   2.2408931,   2.2408931,\n",
       "          2.2408931,   2.2408931,   2.2408931,   2.2408931,   2.2408931,\n",
       "          2.2408931,   2.2408931,   2.2408931,   2.2408931,   2.2408931,\n",
       "          2.2408931,   2.2408931,   2.2408931,   2.2408931,   2.2408931,\n",
       "          2.2408931,   2.2408931,   2.2408931,   2.2408931,   2.2408931,\n",
       "          2.2408931,   2.2408931,   2.2408931,   2.2408931,   2.2408931,\n",
       "          2.2408931,   2.2408931,   2.2408931,   2.2408931,   2.2408931,\n",
       "          2.2408931,   2.2408931,   2.2408931,   2.2408931,   2.2408931,\n",
       "          2.2408931,   2.2408931,   2.2408931,   2.2408931,   2.2408931,\n",
       "          2.2408931,   2.2408931,   2.2408931,   2.2408931,   2.2408931,\n",
       "          2.2408931,   2.2408931,   2.2408931,   2.2408931,   2.2408931,\n",
       "          2.2408931,   2.2408931,   2.2408931,   2.2408931,   2.2408931,\n",
       "          2.2408931,   2.2408931,   2.2408931,   2.2408931,   2.2408931,\n",
       "          2.2408931,   2.2408931,   2.2408931,   2.2408931,   2.2408931],\n",
       "       [  0.       ,   1.010101 ,   2.020202 ,   3.030303 ,   4.040404 ,\n",
       "          5.050505 ,   6.060606 ,   7.070707 ,   8.080808 ,   9.090909 ,\n",
       "         10.10101  ,  11.111111 ,  12.121212 ,  13.131313 ,  14.141414 ,\n",
       "         15.151515 ,  16.161615 ,  17.171717 ,  18.181818 ,  19.19192  ,\n",
       "         20.20202  ,  21.212122 ,  22.222221 ,  23.232323 ,  24.242424 ,\n",
       "         25.252525 ,  26.262627 ,  27.272728 ,  28.282827 ,  29.292929 ,\n",
       "         30.30303  ,  31.313131 ,  32.32323  ,  33.333332 ,  34.343433 ,\n",
       "         35.353535 ,  36.363636 ,  37.373737 ,  38.38384  ,  39.39394  ,\n",
       "         40.40404  ,  41.414143 ,  42.424244 ,  43.434345 ,  44.444443 ,\n",
       "         45.454544 ,  46.464645 ,  47.474747 ,  48.484848 ,  49.49495  ,\n",
       "         50.50505  ,  51.515152 ,  52.525253 ,  53.535355 ,  54.545456 ,\n",
       "         55.555557 ,  56.565655 ,  57.575756 ,  58.585857 ,  59.59596  ,\n",
       "         60.60606  ,  61.61616  ,  62.626263 ,  63.636364 ,  64.64646  ,\n",
       "         65.65656  ,  66.666664 ,  67.676765 ,  68.68687  ,  69.69697  ,\n",
       "         70.70707  ,  71.71717  ,  72.72727  ,  73.73737  ,  74.747475 ,\n",
       "         75.757576 ,  76.76768  ,  77.77778  ,  78.78788  ,  79.79798  ,\n",
       "         80.80808  ,  81.818184 ,  82.828285 ,  83.83839  ,  84.84849  ,\n",
       "         85.85859  ,  86.86869  ,  87.878784 ,  88.888885 ,  89.89899  ,\n",
       "         90.90909  ,  91.91919  ,  92.92929  ,  93.93939  ,  94.94949  ,\n",
       "         95.959595 ,  96.969696 ,  97.9798   ,  98.9899   , 100.       ]],\n",
       "      dtype=float32)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data[0][0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(5, 100)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data[0][0].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "dataloader = DataLoader(data, batch_size=64, shuffle=True)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Build Network"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using cpu device.\n"
     ]
    }
   ],
   "source": [
    "## Get Device for Training\n",
    "device = 'cuda' if torch.cuda.is_available() else 'cpu'\n",
    "print(f'Using {device} device.')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "## Fourier Integral Kernel 1D\n",
    "class FourierIntegralKernel1D(nn.Module):\n",
    "    def __init__(self, in_channels: int, out_channels: int, modes: int):\n",
    "        super(FourierIntegralKernel1D, self).__init__()\n",
    "        '''\n",
    "        '''\n",
    "        self.in_channels = in_channels\n",
    "        self.out_channels = out_channels \n",
    "        self.modes = modes \n",
    "        ## Set (random) weights for the linear transform\n",
    "        weights = torch.rand(self.modes, self.out_channels, self.in_channels, dtype=torch.cfloat) \n",
    "        self.weights = nn.Parameter(weights / (self.in_channels * self.out_channels)) ## Optional: Scale weights\n",
    "\n",
    "    def forward(self, v: torch.Tensor) -> torch.Tensor:\n",
    "        '''\n",
    "        FFT -> Linear Transform -> Inverse FFT\n",
    "        '''\n",
    "        ## FFT\n",
    "        v_rfft = torch.fft.rfft(v) \n",
    "\n",
    "        ## Linear Transform \n",
    "        lv_rfft = torch.zeros(v_rfft.shape, dtype=torch.cfloat)\n",
    "        lv_rfft[:, :, :self.modes] = torch.einsum('koi, bki -> bko', self.weights, v_rfft[:, :, :self.modes].permute(0, 2, 1)).permute(0, 2, 1) ## TODO: Should I have 5 dimensions here?\n",
    "        \n",
    "        ## Inverse FFT\n",
    "        v2 = torch.fft.irfft(lv_rfft, n=v.shape[-1])\n",
    "        return v2\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "## Fourier Network Operator 1D\n",
    "class FourierNetworkOperator1D(nn.Module):\n",
    "    def __init__(self, da: int, du: int, width: int, modes: int):\n",
    "        super(FourierNetworkOperator1D, self).__init__()\n",
    "        '''\n",
    "        '''\n",
    "        self.width = width\n",
    "        self.modes = modes\n",
    "\n",
    "        ## P: Lifts the lower dimensional function to higher dimensional space\n",
    "        self.P = nn.Conv1d(da, self.width, 1) ## TODO: Change da\n",
    "\n",
    "        ## K: Fourier integral kernel operator\n",
    "        self.k0 = FourierIntegralKernel1D(self.width, self.width, self.modes)\n",
    "        self.k1 = FourierIntegralKernel1D(self.width, self.width, self.modes)\n",
    "        self.k2 = FourierIntegralKernel1D(self.width, self.width, self.modes)\n",
    "        self.k3 = FourierIntegralKernel1D(self.width, self.width, self.modes)\n",
    "        self.k4 = FourierIntegralKernel1D(self.width, self.width, self.modes)\n",
    "        self.k5 = FourierIntegralKernel1D(self.width, self.width, self.modes)\n",
    "        self.k6 = FourierIntegralKernel1D(self.width, self.width, self.modes)\n",
    "        self.k7 = FourierIntegralKernel1D(self.width, self.width, self.modes)\n",
    "        self.k8 = FourierIntegralKernel1D(self.width, self.width, self.modes)\n",
    "        self.k9 = FourierIntegralKernel1D(self.width, self.width, self.modes)\n",
    "\n",
    "        ## W: Pointwise linear operator\n",
    "        self.w0 = nn.Conv1d(self.width, self.width, 1)\n",
    "        self.w1 = nn.Conv1d(self.width, self.width, 1)\n",
    "        self.w2 = nn.Conv1d(self.width, self.width, 1)\n",
    "        self.w3 = nn.Conv1d(self.width, self.width, 1)\n",
    "        self.w4 = nn.Conv1d(self.width, self.width, 1)\n",
    "        self.w5 = nn.Conv1d(self.width, self.width, 1)\n",
    "        self.w6 = nn.Conv1d(self.width, self.width, 1)\n",
    "        self.w7 = nn.Conv1d(self.width, self.width, 1)\n",
    "        self.w8 = nn.Conv1d(self.width, self.width, 1)\n",
    "        self.w9 = nn.Conv1d(self.width, self.width, 1)\n",
    "\n",
    "        ## Q: Projects the higher dimensional function to lower dimensional space\n",
    "        self.Q = nn.Conv1d(self.width, du, 1) ## TODO: Change du\n",
    "\n",
    "    def forward(self, x: torch.Tensor) -> torch.Tensor:\n",
    "        '''\n",
    "        '''\n",
    "        ## P\n",
    "        x = self.P(x)\n",
    "\n",
    "        ## Fourier Layer #0\n",
    "        ## K\n",
    "        x1 = self.k0(x)\n",
    "        ## W\n",
    "        x2 = self.w0(x)\n",
    "        ## Sum\n",
    "        x = x1 + x2\n",
    "        ## Gelu\n",
    "        x = nn.functional.gelu(x)\n",
    "        # x = nn.functional.gelu(x1)\n",
    "        # x = nn.functional.gelu(x2)\n",
    "\n",
    "        ## Fourier Layer #1\n",
    "        ## K\n",
    "        x1 = self.k1(x)\n",
    "        ## W\n",
    "        x2 = self.w1(x)\n",
    "        ## Sum \n",
    "        x = x1 + x2\n",
    "        ## Gelu\n",
    "        x = nn.functional.gelu(x)\n",
    "        # x = nn.functional.gelu(x1)\n",
    "        # x = nn.functional.gelu(x2)\n",
    "\n",
    "        ## Fourier Layer #2\n",
    "        ## K\n",
    "        x1 = self.k2(x)\n",
    "        ## W\n",
    "        x2 = self.w2(x)\n",
    "        ## Sum\n",
    "        x = x1 + x2\n",
    "        ## Gelu\n",
    "        x = nn.functional.gelu(x)\n",
    "        # x = nn.functional.gelu(x1)\n",
    "        # x = nn.functional.gelu(x2)\n",
    "\n",
    "        ## Fourier Layer #3\n",
    "        ## K\n",
    "        x1 = self.k3(x)\n",
    "        ## W\n",
    "        x2 = self.w3(x)\n",
    "        ## Sum\n",
    "        x = x1 + x2\n",
    "        ## Gelu\n",
    "        x = nn.functional.gelu(x)\n",
    "        # x = nn.functional.gelu(x1)\n",
    "        # x = nn.functional.gelu(x2)\n",
    "\n",
    "        ## Fourier Layer #4\n",
    "        ## K\n",
    "        x1 = self.k4(x)\n",
    "        ## W\n",
    "        x2 = self.w4(x)\n",
    "        ## Sum\n",
    "        x = x1 + x2\n",
    "        ## Gelu\n",
    "        x = nn.functional.gelu(x)\n",
    "        # x = nn.functional.gelu(x1)\n",
    "        # x = nn.functional.gelu(x2)\n",
    "\n",
    "        ## Fourier Layer #5\n",
    "        ## K\n",
    "        x1 = self.k5(x)\n",
    "        ## W\n",
    "        x2 = self.w5(x)\n",
    "        ## Sum\n",
    "        x = x1 + x2\n",
    "        ## Gelu\n",
    "        x = nn.functional.gelu(x)\n",
    "        # x = nn.functional.gelu(x1)\n",
    "        # x = nn.functional.gelu(x2)\n",
    "\n",
    "        ## Fourier Layer #6\n",
    "        ## K\n",
    "        x1 = self.k6(x)\n",
    "        ## W\n",
    "        x2 = self.w6(x)\n",
    "        ## Sum\n",
    "        x = x1 + x2\n",
    "        ## Gelu\n",
    "        x = nn.functional.gelu(x)\n",
    "        # x = nn.functional.gelu(x1)\n",
    "        # x = nn.functional.gelu(x2)\n",
    "\n",
    "        ## Fourier Layer #7\n",
    "        ## K\n",
    "        x1 = self.k7(x)\n",
    "        ## W\n",
    "        x2 = self.w7(x)\n",
    "        ## Sum\n",
    "        x = x1 + x2\n",
    "        ## Gelu\n",
    "        x = nn.functional.gelu(x)\n",
    "        # x = nn.functional.gelu(x1)\n",
    "        # x = nn.functional.gelu(x2)\n",
    "\n",
    "        ## Fourier Layer #8\n",
    "        ## K\n",
    "        x1 = self.k8(x)\n",
    "        ## W\n",
    "        x2 = self.w8(x)\n",
    "        ## Sum\n",
    "        x = x1 + x2\n",
    "        ## Gelu\n",
    "        x = nn.functional.gelu(x)\n",
    "        # x = nn.functional.gelu(x1)\n",
    "        # x = nn.functional.gelu(x2)\n",
    "\n",
    "        ## Fourier Layer #9\n",
    "        ## K\n",
    "        x1 = self.k9(x)\n",
    "        ## W\n",
    "        x2 = self.w9(x)\n",
    "        ## Sum\n",
    "        x = x1 + x2\n",
    "        ## Gelu\n",
    "        x = nn.functional.gelu(x)\n",
    "        # x = nn.functional.gelu(x1)\n",
    "        # x = nn.functional.gelu(x2)\n",
    "\n",
    "        ## Q\n",
    "        x = self.Q(x)\n",
    "        return x\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of parameters: 697409\n"
     ]
    }
   ],
   "source": [
    "import operator\n",
    "from functools import reduce\n",
    "\n",
    "def count_parameters(model):\n",
    "    c = 0\n",
    "    for p in list(model.parameters()):\n",
    "        c += reduce(operator.mul, list(p.size() + (2, ) if p.is_complex() else p.size()))\n",
    "    return c\n",
    "\n",
    "model = FourierNetworkOperator1D(5, 1, width=64, modes=8)\n",
    "print(f'Number of parameters: {count_parameters(model)}')"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "## Model Parameters\n",
    "learning_rate = 1e-3\n",
    "epochs = 5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "## Loss Function\n",
    "loss_function = nn.MSELoss()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "## Optimizer \n",
    "optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "k: 8\n",
      "m: 103\n",
      "x0: -7.876778612253428\n",
      "v0: -0.3831955337841861\n"
     ]
    },
    {
     "data": {
      "image/png": "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sl+QiQq5fzMjAsB2lFnCTMzqOhuBCADb+WHzPNiL/YKci2RVALajzBLwLwIRALajzBLwLwIRALajzBLwL0uGFz/+8Y91yy23qKWlRccdd5zuuOMOnXzyyVa89ehyWemD30tdrVJ0jlS/Wmp66cjni049fFyhx0z1+6w8xu73p420cZRjgl2tOn9GTPs75mhPa0KrQztVY7SrPVCjl7J/opmVYX2h+j0F337dmT/HKK/l5p+sgzueVX+iWaXxOs06+vTDyZEOaqMbziNttLCNi06VgiFZzfTy3Z///Of627/9W/3kJz/R6tWrdfvtt+uhhx7Szp07VVtbO+73mlK++85j0hNXScnmI68FgpKRO/J5+QxJAam3vbBjpvp9Vh5j9/vTRto4zjGZSLX6s4bKM4n8a70lVQqHQgqlDjmijZM91zkFFdSR77P957D7HNFG57exqk46+2bp6M9rugq5f5seiKxevVonnXSSfvSjH0mScrmc6uvr9fd///fauHHjuN9b9EDkncekX/ytJMdunQL4niEpMM7nbjHazyG582eBX/zxr/Ov/3PawUgh929Tc0TS6bS2b9+utWvXHnnDYFBr167VCy+8MOL4VCqlZDI55KNoctnDMyEEIYCjDb9Ru/XGPdrP4dafBX7xx/vjExsP3zMtYmogcvDgQWWzWc2ZM2fI63PmzFFLS8uI4zdt2qR4PJ7/qK+vL15jPvj90OUYAAAwjCEl9x2+Z1rEUVUzV199tRKJRP6jqampeP94V2vx/i0AALzMwnumqVUzs2bNUigUUmvr0B+otbVVc+fOHXF8JBJRJBIxpzHRORMfAwAALL1nmjojEg6HdeKJJ2rLli3513K5nLZs2aJTTjnFzLceadGphzOCWaUFAGAMAalq/pHyXguYvjTz7W9/W3fffbfuuecevfvuu7r00kvV3d2t9evXm/3WQwVDh8uSJBGMADDb8LR4Y5TX3MArPwcm44/3xrNvsnQ/EdM3NPubv/kbHThwQNdee61aWlp0/PHH64knnhiRwGqJoz9/uCxpwn1Eag7/d9wa7FGOGeU1IxBUYND3GeU1h3/Vhf7bJrbR0venjbTRiz/HaH1fQQUG7SPSVxJXOBScYB8R553HnIIKDfo5uoJVCgakyuygqkaf/64908aqusNBSBH2ESmE6fuITIcpG5pJlu2sui8T02Mf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B1AYv/cZRwQixWBVIAIAAIqnkPu3aTurAgAATIRABAAA2IZABAAA2IZABAAA2IZABAAA2IZABAAA2IZABAAA2IZABAAA2IZABAAA2MbRzyIe2PQ1mUza3BIAADBZA/ftyWze7uhApLOzU5JUX19vc0sAAEChOjs7FY/Hxz3G0c+ayeVyam5uViwWUyBQ3IcFJZNJ1dfXq6mpiefYmIjzbA3OszU4z9bgPFvHrHNtGIY6OztVV1enYHD8LBBHz4gEg0EtWLDA1PeoqqriD90CnGdrcJ6twXm2BufZOmac64lmQgaQrAoAAGxDIAIAAGzj20AkEono+9//viKRiN1N8TTOszU4z9bgPFuD82wdJ5xrRyerAgAAb/PtjAgAALAfgQgAALANgQgAALANgQgAALCNLwORH//4x1q8eLHKysq0evVqvfzyy3Y3ydU2bdqkk046SbFYTLW1tTr//PO1c+fOIcf09fVpw4YNmjlzpqLRqL74xS+qtbXVphZ7w0033aRAIKArr7wy/xrnuXj27dunr3zlK5o5c6bKy8u1cuVKvfLKK/mvG4aha6+9VvPmzVN5ebnWrl2r3bt329hi98lms/re976no446SuXl5VqyZImuv/76Ic8n4TwX7plnntHnPvc51dXVKRAI6NFHHx3y9cmc0/b2dq1bt05VVVWqrq7W17/+dXV1dZnTYMNnHnzwQSMcDhv/8R//Ybz99tvGxRdfbFRXVxutra12N821zjrrLGPz5s1GY2Oj8frrrxt/8Rd/YSxcuNDo6urKH3PJJZcY9fX1xpYtW4xXXnnF+PSnP22ceuqpNrba3V5++WVj8eLFxrHHHmtcccUV+dc5z8XR3t5uLFq0yLjooouMl156yXj//feNJ5980tizZ0/+mJtuusmIx+PGo48+arzxxhvG5z//eeOoo44yent7bWy5u9xwww3GzJkzjV//+tfGH/7wB+Ohhx4yotGo8cMf/jB/DOe5cP/7v/9rXHPNNcYvf/lLQ5LxyCOPDPn6ZM7p2WefbRx33HHGiy++aDz77LPG0qVLjS9/+cumtNd3gcjJJ59sbNiwIf95Nps16urqjE2bNtnYKm9pa2szJBm/+93vDMMwjI6ODqO0tNR46KGH8se8++67hiTjhRdesKuZrtXZ2WksW7bMePrpp43TTjstH4hwnovnqquuMj7zmc+M+fVcLmfMnTvXuOWWW/KvdXR0GJFIxHjggQesaKInnHvuucbXvva1Ia/91V/9lbFu3TrDMDjPxTA8EJnMOX3nnXcMSca2bdvyxzz++ONGIBAw9u3bV/Q2+mppJp1Oa/v27Vq7dm3+tWAwqLVr1+qFF16wsWXekkgkJEk1NTWSpO3bt6u/v3/IeV++fLkWLlzIeZ+CDRs26Nxzzx1yPiXOczE99thjWrVqlS644ALV1tbqhBNO0N13353/+h/+8Ae1tLQMOdfxeFyrV6/mXBfg1FNP1ZYtW7Rr1y5J0htvvKHnnntO55xzjiTOsxkmc05feOEFVVdXa9WqVflj1q5dq2AwqJdeeqnobXL0Q++K7eDBg8pms5ozZ86Q1+fMmaMdO3bY1CpvyeVyuvLKK7VmzRqtWLFCktTS0qJwOKzq6uohx86ZM0ctLS02tNK9HnzwQb366qvatm3biK9xnovn/fff15133qlvf/vb+sd//Edt27ZNl19+ucLhsC688ML8+RztWsK5nryNGzcqmUxq+fLlCoVCymazuuGGG7Ru3TpJ4jybYDLntKWlRbW1tUO+XlJSopqaGlPOu68CEZhvw4YNamxs1HPPPWd3UzynqalJV1xxhZ5++mmVlZXZ3RxPy+VyWrVqlW688UZJ0gknnKDGxkb95Cc/0YUXXmhz67zjF7/4he677z7df//9OuaYY/T666/ryiuvVF1dHefZR3y1NDNr1iyFQqERVQStra2aO3euTa3yjssuu0y//vWv9Zvf/EYLFizIvz537lyl02l1dHQMOZ7zXpjt27erra1Nn/rUp1RSUqKSkhL97ne/07/927+ppKREc+bM4TwXybx583T00UcPee2Tn/ykPvzwQ0nKn0+uJdPzne98Rxs3btSXvvQlrVy5Ul/96lf1rW99S5s2bZLEeTbDZM7p3Llz1dbWNuTrmUxG7e3tppx3XwUi4XBYJ554orZs2ZJ/LZfLacuWLTrllFNsbJm7GYahyy67TI888oi2bt2qo446asjXTzzxRJWWlg457zt37tSHH37IeS/AGWecobfeekuvv/56/mPVqlVat25d/v85z8WxZs2aESXou3bt0qJFiyRJRx11lObOnTvkXCeTSb300kuc6wL09PQoGBx6GwqFQsrlcpI4z2aYzDk95ZRT1NHRoe3bt+eP2bp1q3K5nFavXl38RhU9/dXhHnzwQSMSiRg/+9nPjHfeecf4u7/7O6O6utpoaWmxu2mudemllxrxeNz47W9/a+zfvz//0dPTkz/mkksuMRYuXGhs3brVeOWVV4xTTjnFOOWUU2xstTcMrpoxDM5zsbz88stGSUmJccMNNxi7d+827rvvPqOiosK4995788fcdNNNRnV1tfHf//3fxptvvml84QtfoKy0QBdeeKExf/78fPnuL3/5S2PWrFnGd7/73fwxnOfCdXZ2Gq+99prx2muvGZKM2267zXjttdeMDz74wDCMyZ3Ts88+2zjhhBOMl156yXjuueeMZcuWUb5bTHfccYexcOFCIxwOGyeffLLx4osv2t0kV5M06sfmzZvzx/T29hrf/OY3jRkzZhgVFRXGX/7lXxr79++3r9EeMTwQ4TwXz69+9StjxYoVRiQSMZYvX2789Kc/HfL1XC5nfO973zPmzJljRCIR44wzzjB27txpU2vdKZlMGldccYWxcOFCo6yszGhoaDCuueYaI5VK5Y/hPBfuN7/5zajX5AsvvNAwjMmd048//tj48pe/bESjUaOqqspYv3690dnZaUp7A4YxaAs7AAAAC/kqRwQAADgLgQgAALANgQgAALANgQgAALANgQgAALANgQgAALANgQgAALANgQgAALANgQgAALANgQgAALANgQgAALANgQgAALDN/wdPWi6QEVMaQwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## Test 0\n",
    "k0 = np.random.randint(1, 10)\n",
    "print(f'k: {k0}')\n",
    "k0_vec = torch.from_numpy(k0 * np.ones(100)).float().unsqueeze(0).unsqueeze(0)\n",
    "\n",
    "m0 = np.random.randint(100, 1000)\n",
    "print(f'm: {m0}')\n",
    "m0_vec = torch.from_numpy(m0 * np.ones(100)).float().unsqueeze(0).unsqueeze(0)\n",
    "\n",
    "x00 = np.random.normal(0, 10)\n",
    "print(f'x0: {x00}')\n",
    "x00_vec = torch.from_numpy(x00 * np.ones(100)).float().unsqueeze(0).unsqueeze(0)\n",
    "\n",
    "v00 = np.random.normal(0, 1)\n",
    "print(f'v0: {v00}')\n",
    "v00_vec = torch.from_numpy(v00 * np.ones(100)).float().unsqueeze(0).unsqueeze(0)\n",
    "\n",
    "t_test = torch.from_numpy(np.linspace(0, 100, 100)).float().unsqueeze(0).unsqueeze(0)\n",
    "x0_test = simple_harmonic_oscillator(k0, m0, x00, v00, t_test)\n",
    "\n",
    "\n",
    "plt.scatter(t_test, x0_test, alpha=0.5)\n",
    "plt.scatter(t_test, model(torch.cat((k0_vec, m0_vec, x00_vec, v00_vec, t_test), 1)).detach())\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "k: 3\n",
      "m: 851\n",
      "x0: 15.608696691815428\n",
      "v0: -0.9002683086629437\n"
     ]
    },
    {
     "data": {
      "image/png": "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PDzM/T4P733ve/Hmm29i3759ua9169bhtttuy/1/7udLt2nTpvPa648cOYJFixYBAJYsWYKOjo4p+zkYDOKVV17hfp6HaDQKUZz6MSVJElRVBcD9XCpz2a8bN26E3+/H3r17c9s8++yzUFUVGzZsKO6Airo0t0786le/0gwGg/bII49ohw4d0j71qU9pTqdTc7vdlR5azbrrrrs0h8Oh/c///I82Pj6e+4pGo7ltPv3pT2s9PT3as88+q7322mvaxo0btY0bN1Zw1PUhv+tH07ifi2HPnj2aLMvagw8+qA0ODmqPPfaYZjabtV/84he5bb71rW9pTqdT+93vfqcdOHBAu+WWW9g2O0+33367tmDBglx78m9+8xuttbVV++IXv5jbhvv54oRCIe2NN97Q3njjDQ2A9r3vfU974403tJMnT2qaNrf9euONN2pr1qzRXnnlFe3FF1/Uli5dyvbkcvrRj36k9fT0aHq9Xrvqqqu0l19+udJDqmkApv3avn17bptYLKb94z/+o9bU1KSZzWbtL//yL7Xx8fHKDbpOFBYq3M/F8d///d/aihUrNIPBoC1btkz76U9/OuV5VVW1r371q1p7e7tmMBi09773vdrhw4crNNraFAwGtc9+9rNaT0+PZjQatd7eXu3LX/6ylkgkcttwP1+c5557btpj8u23365p2tz265kzZ7Rbb71Vs1qtmt1u17Zs2aKFQqGij1XQtLyIPyIiIqIqwjUqREREVLVYqBAREVHVYqFCREREVYuFChEREVUtFipERERUtVioEBERUdVioUJERERVi4UKERERVS0WKkRERFS1WKgQERFR1WKhQkRERFWLhQoRERFVrf8f6g0GJv8VPQQAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## Test 1\n",
    "k1 = np.random.randint(1, 10)\n",
    "print(f'k: {k1}')\n",
    "k1_vec = torch.from_numpy(k1 * np.ones(100)).float().unsqueeze(0).unsqueeze(0)\n",
    "\n",
    "m1 = np.random.randint(100, 1000)\n",
    "print(f'm: {m1}')\n",
    "m1_vec = torch.from_numpy(m1 * np.ones(100)).float().unsqueeze(0).unsqueeze(0)\n",
    "\n",
    "x01 = np.random.normal(0, 10)\n",
    "print(f'x0: {x01}')\n",
    "x01_vec = torch.from_numpy(x01 * np.ones(100)).float().unsqueeze(0).unsqueeze(0)\n",
    "\n",
    "v01 = np.random.normal(0, 1)\n",
    "print(f'v0: {v01}')\n",
    "v01_vec = torch.from_numpy(v01 * np.ones(100)).float().unsqueeze(0).unsqueeze(0)\n",
    "\n",
    "t_test = torch.from_numpy(np.linspace(0, 100, 100)).float().unsqueeze(0).unsqueeze(0)\n",
    "x1_test = simple_harmonic_oscillator(k1, m1, x01, v01, t_test)\n",
    "\n",
    "\n",
    "plt.scatter(t_test, x1_test, alpha=0.5)\n",
    "plt.scatter(t_test, model(torch.cat((k1_vec, m1_vec, x01_vec, v01_vec, t_test), 1)).detach())\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "k: 1\n",
      "m: 296\n",
      "x0: 2.8440675208854898\n",
      "v0: 1.644910662466654\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAioAAAGdCAYAAAA8F1jjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAAA9hAAAPYQGoP6dpAABOsUlEQVR4nO3deXRc5X0//ve9c+/sm0a7ZMm2ZLMY2yw2GEFLSONgUpqEQtKW0sQQTlKok4aYppjyDW1OS8039DRNEwpJTmr4nYaQcBoIScvirwlQqLHBYIMMXuRNskYzI3s0+z73/v4YzzAzWixZmv39Okcn0cy19Oja3PvR8zyf9xVUVVVBREREVIXESg+AiIiIaDosVIiIiKhqsVAhIiKiqsVChYiIiKoWCxUiIiKqWixUiIiIqGqxUCEiIqKqxUKFiIiIqpZU6QHMl6IocDqdsFgsEASh0sMhIiKiWVBVFcFgEF1dXRDF6edNar5QcTqd6OnpqfQwiIiI6ByMjIxg0aJF075f84WKxWIBkPlBrVZrhUdDREREsxEIBNDT05O7j0+n5guV7HKP1WploUJERFRjzrZto6SbaR999FGsXr06V0QMDAzg+eefz70fi8WwadMmNDc3w2w24+abb4bb7S7lkIiIiKiGlLRQWbRoER566CHs2bMHb7/9Nn7v934Pn/3sZ7F//34AwDe+8Q38+te/xtNPP41XX30VTqcTN910UymHRERERDVEUFVVLec3dDgcePjhh/G5z30Ora2tePLJJ/G5z30OAHDgwAFceOGF2LlzJ6688spZfb1AIACbzQa/38+lHyIiohox2/t32XJU0uk0nnrqKYTDYQwMDGDPnj1IJpNYv3597pgLLrgAvb292Llz57RfJx6PIxAIFHwQERFRfSp5ofL+++/DbDZDp9PhzjvvxDPPPIMVK1bA5XJBq9XCbrcXHN/e3g6XyzXt19u6dStsNlvug63JRERE9avkhcr555+PvXv3YteuXbjrrruwceNGfPDBB+f89e677z74/f7cx8jIyAKOloiIiKpJyduTtVotli1bBgBYs2YN3nrrLXzve9/DH//xHyORSMDn8xXMqrjdbnR0dEz79XQ6HXQ6XamHTURERFWg7M/6URQF8Xgca9asgSzL2LFjR+69gwcPYnh4GAMDA+UeFhEREVWhks6o3HffffjUpz6F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c+edd6q9vb3qyy+/rL799tvqwMCAOjAwUMFR14f8rh9V5XleCLt371YlSVIffPBB9fDhw+pPf/pT1Wg0qv/xH/+RO+ahhx5S7Xa7+qtf/Up977331M9+9rNsm52jjRs3qt3d3bn25F/+8pdqS0uL+td//de5Y3iez00wGFTfffdd9d1331UBqP/8z/+svvvuu+qJEydUVZ3deb3++uvVSy+9VN21a5f6+uuvq8uXL2d7cjl9//vfV3t7e1WtVqteccUV6ptvvlnpIdU0AFN+bNu2LXdMNBpV/+Iv/kJtampSjUaj+od/+Ifq2NhY5QZdJ4oLFZ7nhfHrX/9aXblyparT6dQLLrhA/dGPflTwvqIo6re+9S21vb1d1el06ic+8Qn14MGDFRptbQoEAurXv/51tbe3V9Xr9WpfX596//33q/F4PHcMz/O5+e1vfzvlNXnjxo2qqs7uvJ4+fVq95ZZbVLPZrFqtVvX2229Xg8Hggo9VUNW8iD8iIiKiKsI9KkRERFS1WKgQERFR1WKhQkRERFWLhQoRERFVLRYqREREVLVYqBAREVHVYqFCREREVYuFChEREVUtFipERERUtVioEBERUdVioUJERERVi4UKERERVa3/H7ODT7VyZ7GwAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## Test 2\n",
    "k2 = np.random.randint(1, 10)\n",
    "print(f'k: {k2}')\n",
    "k2_vec = torch.from_numpy(k2 * np.ones(100)).float().unsqueeze(0).unsqueeze(0)\n",
    "\n",
    "m2 = np.random.randint(100, 1000)\n",
    "print(f'm: {m2}')\n",
    "m2_vec = torch.from_numpy(m2 * np.ones(100)).float().unsqueeze(0).unsqueeze(0)\n",
    "\n",
    "x02 = np.random.normal(0, 10)\n",
    "print(f'x0: {x02}')\n",
    "x02_vec = torch.from_numpy(x02 * np.ones(100)).float().unsqueeze(0).unsqueeze(0)\n",
    "\n",
    "v02 = np.random.normal(0, 1)\n",
    "print(f'v0: {v02}')\n",
    "v02_vec = torch.from_numpy(v02 * np.ones(100)).float().unsqueeze(0).unsqueeze(0)\n",
    "\n",
    "t_test = torch.from_numpy(np.linspace(0, 100, 100)).float().unsqueeze(0).unsqueeze(0)\n",
    "x2_test = simple_harmonic_oscillator(k2, m2, x02, v02, t_test)\n",
    "\n",
    "\n",
    "plt.scatter(t_test, x2_test, alpha=0.5)\n",
    "plt.scatter(t_test, model(torch.cat((k2_vec, m2_vec, x02_vec, v02_vec, t_test), 1)).detach())\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "## Training Loop\n",
    "def train_loop(dataloader, model, loss_function, optimizer):\n",
    "    size = len(dataloader.dataset)\n",
    "    for batch, (t, x) in enumerate(dataloader):\n",
    "        # Compute prediction and loss\n",
    "        pred = model(t)\n",
    "        loss = loss_function(pred, x)\n",
    "\n",
    "        # Backpropagation\n",
    "        optimizer.zero_grad()\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "\n",
    "        if batch % 100 == 0:\n",
    "            loss, current = loss.item(), batch * len(t)\n",
    "            print(f\"loss: {loss:>7f}  [{current:>5d}/{size:>5d}]\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1\n",
      "-------------------------------\n",
      "loss: 0.184391  [    0/100000]\n",
      "loss: 0.167615  [ 6400/100000]\n",
      "loss: 0.310922  [12800/100000]\n",
      "loss: 0.292066  [19200/100000]\n",
      "loss: 0.241697  [25600/100000]\n",
      "loss: 0.398809  [32000/100000]\n",
      "loss: 1.380695  [38400/100000]\n",
      "loss: 0.308398  [44800/100000]\n",
      "loss: 0.214892  [51200/100000]\n",
      "loss: 0.473686  [57600/100000]\n",
      "loss: 0.890357  [64000/100000]\n",
      "loss: 1.782364  [70400/100000]\n",
      "loss: 0.877723  [76800/100000]\n",
      "loss: 0.365493  [83200/100000]\n",
      "loss: 0.561622  [89600/100000]\n",
      "loss: 0.227821  [96000/100000]\n",
      "Epoch 2\n",
      "-------------------------------\n",
      "loss: 0.830555  [    0/100000]\n",
      "loss: 3.482246  [ 6400/100000]\n",
      "loss: 4.965187  [12800/100000]\n",
      "loss: 1.154431  [19200/100000]\n",
      "loss: 0.578619  [25600/100000]\n",
      "loss: 0.242640  [32000/100000]\n",
      "loss: 0.253079  [38400/100000]\n",
      "loss: 0.906440  [44800/100000]\n",
      "loss: 0.630674  [51200/100000]\n",
      "loss: 0.264395  [57600/100000]\n",
      "loss: 0.135208  [64000/100000]\n",
      "loss: 0.327444  [70400/100000]\n",
      "loss: 0.132434  [76800/100000]\n",
      "loss: 14.889207  [83200/100000]\n",
      "loss: 1.616668  [89600/100000]\n",
      "loss: 0.792831  [96000/100000]\n",
      "Epoch 3\n",
      "-------------------------------\n",
      "loss: 0.973899  [    0/100000]\n",
      "loss: 0.737937  [ 6400/100000]\n",
      "loss: 0.316119  [12800/100000]\n",
      "loss: 0.357881  [19200/100000]\n",
      "loss: 0.128649  [25600/100000]\n",
      "loss: 0.230655  [32000/100000]\n",
      "loss: 0.294048  [38400/100000]\n",
      "loss: 0.162725  [44800/100000]\n",
      "loss: 0.367154  [51200/100000]\n",
      "loss: 0.327415  [57600/100000]\n",
      "loss: 0.188667  [64000/100000]\n",
      "loss: 0.974932  [70400/100000]\n",
      "loss: 0.317819  [76800/100000]\n",
      "loss: 0.417798  [83200/100000]\n",
      "loss: 1.530440  [89600/100000]\n",
      "loss: 0.525137  [96000/100000]\n",
      "Epoch 4\n",
      "-------------------------------\n",
      "loss: 0.118723  [    0/100000]\n",
      "loss: 1.735393  [ 6400/100000]\n",
      "loss: 0.544367  [12800/100000]\n",
      "loss: 0.981896  [19200/100000]\n",
      "loss: 0.844738  [25600/100000]\n",
      "loss: 0.465856  [32000/100000]\n",
      "loss: 0.267271  [38400/100000]\n",
      "loss: 0.241330  [44800/100000]\n",
      "loss: 0.518236  [51200/100000]\n",
      "loss: 0.706129  [57600/100000]\n",
      "loss: 0.634072  [64000/100000]\n",
      "loss: 0.912795  [70400/100000]\n",
      "loss: 0.395431  [76800/100000]\n",
      "loss: 0.277892  [83200/100000]\n",
      "loss: 0.610348  [89600/100000]\n",
      "loss: 0.224313  [96000/100000]\n",
      "Epoch 5\n",
      "-------------------------------\n",
      "loss: 0.819200  [    0/100000]\n",
      "loss: 0.238964  [ 6400/100000]\n",
      "loss: 3.878912  [12800/100000]\n",
      "loss: 2.432172  [19200/100000]\n",
      "loss: 0.229355  [25600/100000]\n",
      "loss: 0.199201  [32000/100000]\n",
      "loss: 0.163175  [38400/100000]\n",
      "loss: 0.238173  [44800/100000]\n",
      "loss: 0.173466  [51200/100000]\n",
      "loss: 0.400107  [57600/100000]\n",
      "loss: 0.177621  [64000/100000]\n",
      "loss: 0.413513  [70400/100000]\n",
      "loss: 0.492497  [76800/100000]\n",
      "loss: 0.920032  [83200/100000]\n",
      "loss: 0.837869  [89600/100000]\n",
      "loss: 0.445456  [96000/100000]\n",
      "Done!\n"
     ]
    }
   ],
   "source": [
    "for t in range(epochs):\n",
    "    print(f\"Epoch {t+1}\\n-------------------------------\")\n",
    "    train_loop(dataloader, model, loss_function, optimizer)\n",
    "print(\"Done!\")"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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c3rwfU4Pvs/pwfc5fbTwXms6WJWIiIgym2FXRIiIiEh9HIgQERGRajgQISIiItVwIEJERESqMeRA5Be/+AUmTJiA7OxszJ07F++9957ap6RrGzZswNlnnw2HwwG3243LL78chw4dijqmp6cHK1euxJgxY2C32/GNb3wDzc3NKp1xZnjooYcgCAJWrVo18Bjf59Spr6/H//t//w9jxoxBTk4OZs6ciQ8++GDgeUmScN9996GsrAw5OTlYvHgxjhw5ouIZ608oFMK9996LiRMnIicnB5MmTcIDDzwQ1Z+E73Py/va3v+GSSy5BeXk5BEHA888/H/V8Iu9pW1sbrrnmGjidTuTn5+OGG25AR0eHMicsGcwf/vAHyWq1Sv/93/8tffzxx9KNN94o5efnS83NzWqfmm5deOGF0qZNm6QDBw5IH330kXTRRRdJ48aNkzo6OgaOufnmm6XKykrp9ddflz744APpn/7pn6T58+ereNb69t5770kTJkyQzjjjDOn2228feJzvc2q0tbVJ48ePl66//nppz5490ieffCJt375dqq2tHTjmoYceklwul/T8889L+/btky699FJp4sSJUnd3t4pnri8PPvigNGbMGOmll16SPv30U+nZZ5+V7Ha79B//8R8Dx/B9Tt7LL78s3X333dKf/vQnCYD05z//Oer5RN7TpUuXSrNmzZLeffdd6a233pKqq6ulq666SpHzNdxA5JxzzpFWrlw58HUoFJLKy8ulDRs2qHhWmcXj8UgApL/+9a+SJElSe3u7lJWVJT377LMDx/zf//2fBEDavXu3WqepW36/X5o8ebL06quvSueee+7AQITvc+qsWbNG+vKXvzzk86IoSqWlpdIjjzwy8Fh7e7tks9mkp59+Oh2nmBGWLVsmffvb34567Otf/7p0zTXXSJLE9zkVBg9EEnlPa2pqJADS+++/P3DMK6+8IgmCINXX16f8HA21NRMIBLB3714sXrx44DGTyYTFixdj9+7dKp5ZZvF6vQCAwsJCAMDevXvR19cX9b5PnToV48aN4/t+ClauXIlly5ZFvZ8A3+dU2rp1K+bMmYMrr7wSbrcbZ511Fn7zm98MPP/pp5+iqakp6r12uVyYO3cu3+skzJ8/H6+//joOHz4MANi3bx/efvttfO1rXwPA91kJibynu3fvRn5+PubMmTNwzOLFi2EymbBnz56Un5Omm96lWmtrK0KhEEpKSqIeLykpwcGDB1U6q8wiiiJWrVqFBQsWYMaMGQCApqYmWK1W5OfnRx1bUlKCpqYmFc5Sv/7whz/g73//O95///2Y5/g+p84nn3yCJ554AqtXr8Zdd92F999/H7fddhusViuWL18+8H7Gu5fwvU7c2rVr4fP5MHXqVJjNZoRCITz44IO45pprAIDvswISeU+bmprgdrujnrdYLCgsLFTkfTfUQISUt3LlShw4cABvv/222qeScerq6nD77bfj1VdfRXZ2ttqnk9FEUcScOXPw4x//GABw1lln4cCBA/jVr36F5cuXq3x2mWPLli34/e9/j82bN2P69On46KOPsGrVKpSXl/N9NhBDbc0UFRXBbDbHZBE0NzejtLRUpbPKHLfeeiteeuklvPnmmxg7duzA46WlpQgEAmhvb486nu97cvbu3QuPx4MvfelLsFgssFgs+Otf/4qf/exnsFgsKCkp4fucImVlZZg2bVrUY6effjo+++wzABh4P3kvGZ077rgDa9euxb/8y79g5syZuPbaa/H9738fGzZsAMD3WQmJvKelpaXweDxRzweDQbS1tSnyvhtqIGK1WjF79my8/vrrA4+JoojXX38d8+bNU/HM9E2SJNx6663485//jDfeeAMTJ06Men727NnIysqKet8PHTqEzz77jO97Es4//3zs378fH3300cCfOXPm4Jprrhn4/3yfU2PBggUxKeiHDx/G+PHjAQATJ05EaWlp1Hvt8/mwZ88evtdJ6OrqgskU/TFkNpshiiIAvs9KSOQ9nTdvHtrb27F3796BY9544w2Iooi5c+em/qRSHv6qcX/4wx8km80m/fa3v5Vqamqkm266ScrPz5eamprUPjXd+t73vie5XC5p586dUmNj48Cfrq6ugWNuvvlmady4cdIbb7whffDBB9K8efOkefPmqXjWmSEya0aS+D6nynvvvSdZLBbpwQcflI4cOSL9/ve/l3Jzc6X//d//HTjmoYcekvLz86UXXnhB+sc//iFddtllTCtN0vLly6WKioqB9N0//elPUlFRkXTnnXcOHMP3OXl+v1/68MMPpQ8//FACID322GPShx9+KB0/flySpMTe06VLl0pnnXWWtGfPHuntt9+WJk+ezPTdVHr88celcePGSVarVTrnnHOkd999V+1T0jUAcf9s2rRp4Jju7m7plltukQoKCqTc3Fzpn//5n6XGxkb1TjpDDB6I8H1OnRdffFGaMWOGZLPZpKlTp0pPPvlk1POiKEr33nuvVFJSItlsNun888+XDh06pNLZ6pPP55Nuv/12ady4cVJ2drZUVVUl3X333VJvb+/AMXyfk/fmm2/GvScvX75ckqTE3tMvvvhCuuqqqyS73S45nU5pxYoVkt/vV+R8BUmKKGFHRERElEaGihEhIiIibeFAhIiIiFTDgQgRERGphgMRIiIiUg0HIkRERKQaDkSIiIhINRyIEBERkWo4ECEiIiLVcCBCREREquFAhIiIiFTDgQgRERGphgMRIiIiUs3/DzC17p34wseFAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## Test 0\n",
    "plt.scatter(t_test, x0_test, alpha=0.5)\n",
    "plt.scatter(t_test, model(torch.cat((k0_vec, m0_vec, x00_vec, v00_vec, t_test), 1)).detach())\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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516FygBOp5P58+fzzDPP9N1nGAbPPPMMCxcuHMORpTfTNLn++uv561//yrPPPsv06dP7PT5//nwcDke/875jxw4OHDig8z4MH/nIR3jvvffYsmVL39c555zDZz/72b7/rfN88hYvXnzU9vqdO3cydepUAKZPn05JSUm/8xwIBNi8ebPO8zB0dHRgtfZ/m7LZbBiGAeg8J0si53XhwoW0tbXx5ptv9h3z7LPPYhgGCxYsGNkBjWhr7jjxhz/8wXS5XOb9999vbtu2zbz22mvNnJwcs66ubqyHlra+/OUvmz6fz9y4caNZW1vb99XR0dF3zJe+9CVzypQp5rPPPmu+8cYb5sKFC82FCxeO4ajHhyN3/ZimzvNIeO2110y73W7ecccd5q5du8zf/e53ZmZmpvm///u/fcf86Ec/MnNycsxHH33UfPfdd81LL71U22aHac2aNeakSZP6tif/5S9/MQsKCsxvfOMbfcfoPJ+YYDBovv322+bbb79tAuZPf/pT8+233zb3799vmmZi53XlypXm2WefbW7evNl86aWXzNmzZ2t78mj62c9+Zk6ZMsV0Op3meeedZ7766qtjPaS0Bgz6dd999/Ud09nZaX7lK18xc3NzzczMTPPjH/+4WVtbO3aDHicGFio6zyPjb3/7mzl37lzT5XKZc+bMMX/961/3e9wwDPPb3/62WVxcbLpcLvMjH/mIuWPHjjEabXoKBALm1772NXPKlCmm2+02Z8yYYd52221md3d33zE6zyfmueeeG/Q1ec2aNaZpJnZem5ubzU9/+tOmx+MxvV6vec0115jBYHDEx2oxzSMi/kRERERSiHpUREREJGWpUBEREZGUpUJFREREUpYKFREREUlZKlREREQkZalQERERkZSlQkVERERSlgoVERERSVkqVERERCRlqVARERGRlKVCRURERFKWChURERFJWf8/X9fsYF5mCRwAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## Test 1\n",
    "plt.scatter(t_test, x1_test, alpha=0.5)\n",
    "plt.scatter(t_test, model(torch.cat((k1_vec, m1_vec, x01_vec, v01_vec, t_test), 1)).detach())\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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73vfM1wul7Fu3Tpj//794Y/m5ubwNd/97neNMWPGGK+++qrx/vvvGyUlJUZJSckwjjoxdO36MQzd58Hw7rvvGlar1bj33nuNnTt3Gn/729+M1NRU43/+53/C19x///1GRkaG8cILLxgff/yxcemll6ptdoAWLlxoFBYWhtuTn332WSM7O9v413/91/A1us9Hx+v1Gh9++KHx4YcfGoDxq1/9yvjwww+Nzz//3DCMyO7rBRdcYJx88snGxo0bjTfffNOYNGmS2pOH0m9/+1tjzJgxht1uN04//XTjnXfeGe4hxTWg14/HHnssfE1LS4txyy23GKNGjTJSU1ONr371q8b+/fuHb9AJomehovs8OF588UVj2rRpRlJSkjFlyhTj0Ucf7fZ6IBAwfvzjHxu5ublGUlKScf755xs7duwYptHGJ4/HY/zgBz8wxowZYyQnJxvFxcXG3XffbbS1tYWv0X0+Oq+99lqv35MXLlxoGEZk9/XgwYPG1VdfbTgcDsPpdBo33HCD4fV6B32sJsPoEvEnIiIiEkO0R0VERERilgoVERERiVkqVERERCRmqVARERGRmKVCRURERGKWChURERGJWSpUREREJGapUBEREZGYpUJFREREYpYKFREREYlZKlREREQkZqlQERERkZj1/wFEdkORY7kr2gAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## Test 2\n",
    "plt.scatter(t_test, x2_test, alpha=0.5)\n",
    "plt.scatter(t_test, model(torch.cat((k2_vec, m2_vec, x02_vec, v02_vec, t_test), 1)).detach())\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.8"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "9b3b15e79d64212a14c381e1bc9a41101994b32312634469deb1a16fd6054240"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
